package cl.tinet.trainee.tarea6.ejb;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import cl.tinet.trainee.tarea6.UsuarioDAO;
import cl.tinet.trainee.tarea6.UsuarioDAOInterface;
import cl.tinet.trainee.tarea6.exception.UsuarioDaoException;
import cl.tinet.trainee.tarea6.model.Usuario;

@Stateless(mappedName = "UsuarioBean", name = "UsuarioBean")
public class UsuarioBeanImpl implements UsuarioBean {

	private static final String USUARIO_AGREGADO = "Usuario agregado.";
	private static final String USUARIO_ELIMINADO = "Usuario eliminado.";
	private static final String USUARIO_ACTUALIZADO = "Usuario actualizado.";
	@PersistenceContext(unitName = "MySqlDS")
	private EntityManager em;
	@Resource
	SessionContext ctx;

	private UsuarioDAOInterface<Usuario> dao;

	@PostConstruct
	private void init() {
		if (dao == null) {
			dao = new UsuarioDAO(em);
		}
	}

	public boolean agregar(Usuario usuario) throws UsuarioDaoException {
		boolean transaccion = false;
		Usuario flag = this.buscar(usuario);
		if (flag == null) {			
			dao.agregar(usuario);
			transaccion = true;
		} else {
			throw new UsuarioDaoException();
		}
		return transaccion;
	}

	public boolean eliminar(Usuario eliminar) {
		Usuario encontrado;
		encontrado = this.buscar(eliminar);
		dao.borrar(encontrado);
		return true;
	}

	public boolean actualizar(Usuario actualizado) {
		Usuario encontrado = null;
		encontrado = this.buscar(actualizado);
		encontrado.copiar(actualizado);
		dao.actualizar(encontrado);
		return true;
	}

	public List<Usuario> listarUsuario(String nombre) {
		return dao.buscarTodos(nombre);
	}

	public Usuario buscar(Usuario buscado) {
		Usuario encontrado = dao.buscar(buscado);
		if (encontrado != null) {
			return encontrado;
		} else {
			return null;
		}
	}

	public EntityManager getEm() {
		return em;
	}

	public void setEm(EntityManager em) {
		this.em = em;
	}

}
